#ifndef __LLM_CORE_DEVICE_H__
#define __LLM_CORE_DEVICE_H__

#include "utils/status.h"
#include "utils/mm.h"

#include <cstddef>

namespace llm_core
{

class Device
{

public:
    enum Type {
        DEVICE_TYPE_CPU,
        DEVICE_TYPE_OPENCL
    };

    Device() {}
    Device(const size_t id, const Type type): m_id(id), m_type(type) {}
    ~Device() {}

    Type GetType() const { return m_type; }
    size_t GetId() const { return m_id; }

private:
    Type m_type;
    size_t m_id;
}; // class Device


class CPUDevice: public Device
{
public:
    CPUDevice() {}
    CPUDevice(const size_t id): Device(id, DEVICE_TYPE_CPU) {}
    ~CPUDevice() {}
}; // class CPUDevice

} // namespace llm_core

#endif // __LLM_CORE_DEVICE_H__